dofile "lib/radical.lua" 

function tile(s) 
  return const.path.gfx.."game/med/"..s..".jpg"; 
end

function cm_tile(s) 
  return const.path.gfx.."game/common/"..s..".jpg"; 
end

function ct_tile(s) 
  return const.path.gfx.."game/city/"..s..".jpg"; 
end

function ka_tile(s) 
  return const.path.gfx.."game/ka/"..s..".jpg"; 
end

function dxml(s)
  return const.path.dlg.."1-deadhour/clinic/"..s..".xml";
end

clinic = engine.state {
   _static      = false --Kate hears static
  ,_tv1         = false --Kate tuned TV
  ,_tv2         = false --Dad asks Kate to tune TV again
  ,_wait1       = false --First stage of wait is over
  ,_wait2       = false --Second stage of wait is over
  ,_wait3       = false --Third stage of wait is over
}

clinic_player = musplayer.player {
   sfx("long_static3"):inside("start2"):when("clinic._static"):loop()
  ,mute():inside("tv1")
  ,mus("atrest_short"):inside("tv2")
  ,sfx("long_static2"):inside("kahall1"):loop()
  ,mus("atrest_short"):inside("coridor2_chairs_scene")
  ,sfx("dooropen2"):inside("coridor2_chairs_scene2")
  ,mus("satiate_strings"):inside("coridor1"):when("clinic._wait2")
  ,mute():inside("mainhall"):when("clinic._wait3"):fade(3000,3000)
  ,sfx("doorclose_echo"):inside("finita")
}

main = engine.main {
   start        = chain_ {
                     episode_("1-clinic")
                    ,musplayer_("clinic_player")
                    ,walk_("start1")
                  }
  ,finish       = gamefile_("1-deadhour/tea.lua")
}

start1 = cutscene {
   bounds       = { 260, 220, 480 }
  ,dsc          = [[Катя даже не помнила, как заснула в тот день. Она чувствовала себя просто смертельно уставшей и боялась,
                    что проспит несколько дней кряду. Она даже попросила отца разбудить, хотя всегда поднималась сама. Однако что-то
                    вновь разбудило ее посреди ночи.]]
  ,next         = "start2"
}

start2 = scene {
   tile         = ka_tile "bed"
  ,obj          = { "start2_pain", "start2_tired", "start2_static" }
}

start2_pain = staticitem {
   dsc          = "Катя лежала на постели. Нога, которую она ударила вчера, когда прыгала из окна, {start2_pain|болела}."
  ,act          = "Судя по всему, это просто ушиб. Лучше не рассказывать об этом отцу, чтобы он не беспокоился."
  ,showonce     = true
}

start2_tired = staticitem {
   dsc          = "Она по-прежнему чувствовала себя {start2_tired|уставшей}, однако сон никак не шел."
  ,act          = "Кажется, эта усталость никогда не пройдет, сколько бы она ни спала."
  ,showonce     = true
}

start2_static = staticitem {
   dsc          = "^^Вскоре из гостиной послышался сдавленный шум {помех}."
  ,act          = chain_ { set_("clinic._static"), "Это похоже на телевизор. Значит, отец тоже не спит. Надо {start2_getup|вставать}." }
}

start2_getup = staticitem {
  act           = walk_("start3")
}

start3 = pause {
   time         = 2000
  ,fading       = 60
  ,next         = "kahall1"
}

function tv_anim(target)
  return function(o)
    o.ontimer = function(s,x,y)
                  if s.fno == nil then
                    s.fno = 1;
                  elseif s.fno == 5 then
                    s.fno = 1;
                  end 
                  local spr = sprite.load(s.frames[s.fno]);
                  sprite.copy(spr, s.pic, 50, 223);
                  sprite.free(spr);
                  s.fno = s.fno + 1;
                end
    o.tile        = cm_tile "tv"
    o.frames      = { cm_tile "static1", cm_tile "static2", cm_tile "static3", cm_tile "static4" }
    return target(o);
  end
end

kahall1 = tv_anim(dialog) {
   dsc          = "-- Ой, извини, я разбудил тебя?"
  ,dlg          = dxml "tv"
}

kahall2 = tv_anim(scene) {
  obj           = { "kahall2_tune" }
}

kahall2_tune = matroska {
   { dsc = "Катя {переключает} каналы на телевизоре, но везде передают одно и то же -- мелкую серую рябь помех с надсадным надоедливым шумом, который доносится из динамиков.", act = "Нет, видимо, антенну на сей раз окончательно сломали." }
  ,{ dsc = "Катя {продолжает} переключать телевизор с канала на канал, хотя и так уже понятно, что ничего не работает.", act = chain_ { set_("clinic._tv1"), walk_("kahall3") } }
}

kahall3 = tv_anim(dialog) {
   dsc          = "-- Погоди-ка! Мне кажется, тут что-то есть."
  ,dlg          = dxml "tv"
}

kahall4 = tv_anim(scene) {
   dsc          = [[-- ...печальный день... в связи с чем в эфир... минута молчания в па... когда многие потеряли... 
                    несмотря на... встает в нашей памяти... глубокую трав... не скоро еще излечимся... мертвым городом...
                    страшной моги... июня 1977 го... геройстве спасателей... миллионы других...]]
  ,obj          = { "kahall4_static" }
}

kahall4_static = staticitem {
   dsc          = "^^Катя слышит лишь какие-то обрывки слов, и ничего {не может} разобрать."
  ,act          = walk_("kahall5")
}

kahall5 = tv_anim(scene) {
   dsc          = [[-- ...призывали и призываем... тем тяжелее... официальные... в неделю траура.. сразу в нескольких ра...
                    демонстрации оппози... очевидно любому... в этот тяжелый день... всю последующую... усилено патрулирование...
                    мобильные станции слеже... даже днем... час будет на... исключительно для вашей бе...
                  ]]
  ,obj          = { "kahall5_static" }
}

kahall5_static = staticitem {
   dsc          = "^^Кате по-прежнему ничего {не слышно}."
  ,act          = chain_ { set_("clinic._tv2"), walk_("kahall6") }
}

kahall6 = tv_anim(dialog) {
   dsc          = "-- А попробуй-ка переключить на другой канал."
  ,dlg          = dxml "tv"
}

tv1 = pause {
   time         = 4000
  ,next         = "tv2"
}

tv2 = pause {
   time         = 3000
  ,next         = "tv3"
}

tv3 = cutscene {
   fading       = 60
  ,tile         = { ct_tile "cityview", 0, 0 }
  ,bounds       = { 40, 440, 870}
  ,dsc          = [[-- Как вы все знаете, сегодня для нас довольно печальный день. Исполняется ровно тридцать лет со дня аварии, в связи с чем в эфир не будут
                    выходить все развлекательные передачи, а ровно в 15 часов начнется минута молчания в память о погибших. Это тяжелый день для нас всех, день,
                    когда многие потеряли своих близких, день, который, несмотря на тридцать прошедших лет, до сих пор встает в нашей памяти. Все мы тогда получили
                    глубокую травму, от которой не скоро еще излечимся. Те районы, которые многие называют мертвым городом и которые стали страшной могилой для 
                    тысяч людей, будут служить для нас вечным напоминанием о том дне, 7 июня 1977 года, напоминанием о самоотверженности и геройстве спасателей, 
                    которые пожертвовали своими жизнями, чтобы спасти миллионы других. 
                  ]]
  ,next         = "tv4"
}

tv4 = cutscene {
   tile         = { ct_tile "cityview", 0, 0 }
  ,bounds       = { 40, 440, 870}
  ,dsc          = [[-- В этот день мы призывали и призываем всех к смирению и покаянию. И тем тяжелее мне сообщать о том, что, несмотря на официальный запрет на 
                    проведение публичных мероприятий в неделю траура, вчера, сразу в нескольких районах города, были проведены демонстрации оппозиционной партии,
                    главным смыслом которых, как это становится очевидно любому, было не выразить какие-то протесты, а опорочить для всех нас этот тяжелый день. 
                    В связи с этим сегодня, а также всю последующую неделю будет усилено патрулирование по всем районам города, мобильные станции слежения будут 
                    курсировать даже днем, а комендантский час будет начинаться на два часа раньше. Поверьте, все это делается исключительно для вашей безопасности, 
                    для того, чтобы...
                  ]]
  ,next         = "inter"
}

inter = cutscene {
   bounds       = { 260, 220, 480 }
  ,dsc          = [[Через несколько часов Катя поехала с отцом в поликлинику, где работал доктор, которого порекомендовал ей Кочевников.
                    Уже записавшись на прием и заняв очередь, она вспомнила, что собиралась съездить на лекцию в институт.
                  ]]
  ,next         = "mainhall"
}

mainhall = scene {
   tile         = tile "door"
  ,bounds       = { 370, 50, 480 }
  ,ontimer      = function(s,x,y)
                    if clinic._wait3 then
                      if s.fno == nil then
                        s.fno = 0;
                      end
                      s.fno = s.fno + 1;
                      if math.mod(s.fno, 20) == 0 then
                        local spr = nil;
                        if math.mod(s.fno / 20, 2) == 0 then
                          drawing.clean(s.pic, 0, 0, const.picwidth, const.picheight);
                          spr = sprite.load(tile("door"));
                          sprite.copy(spr, s.pic, 0, 109);
                        else
                          local spr = sprite.load(tile("door2"));
                          sprite.copy(spr, s.pic, 0, 109);
                        end
                        sprite.free(spr);
                      end
                    end
                  end
  ,dsc          = "Катя совсем не выспалась за прошедшую ночь, она едва стоит на ногах, однако все места на скамейке у кабинета заняты, и ей приходится стоять, прислонившись к стене.^^"
  ,obj          = { "dad", "dad_pain", "clinicman", "oldwoman", "mainhall_wait", "mainhall_lamp" }
  ,nav          = {
                     up = vw("В кабинет Тихонова", "cabinet"):cnd("clinic._wait3", "Их пока не вызывали. Нужно просто немного подождать. Скоро уже подойдет их очередь.")
                    ,down = vw("В коридор", "coridor1")
                  }
}

mainhall_wait = staticitem {
   dsc          = "^^Катю в конец {утомило} это ожидание. Кажется, что само течение времени здесь как-то изменилось, и проходит целая вечность, прежде чем сдигается минутная стрелка на настенных часах."
  ,showonce     = true
  ,cnd          = if_("clinic._wait2 and not clinic._wait3")
  ,act          = "По какой-то причине Катю вновь тянет в длинный, вычищенный до блеска коридор поликлиники."
}

mainhall_lamp = staticitem {
   dsc          = "^^Лампа над дверью в кабинет доктора Тихонова {мигает}."
  ,act          = "Наконец-то наступила их очередь. У Кати такое чувство, что они пробыли здесь половину дня, не меньше."
  ,showonce     = true
  ,cnd          = if_("clinic._wait3")
}

dad = staticitem {
   dsc          = choose_ {
                     ["default"] = "{Отец} сидит, ссутулившись, у двери в кабинет Тихонова,"
                    ,["clinic._wait1 and not clinic._wait2 and not clinic._wait3"] = "{Отец} как-то странно смотрит на Катю. Кажется, он хочет ей что-то сказать."
                    ,["clinic._wait2 and not clinic._wait3"] = "{Отец} сидит, ссутулившись, у двери в кабинет Тихонова."
                    ,["clinic._wait3"] = "Кажется, {отец} тоже устал ждать."
                  }
  ,act          = walk_("dad_dlg")
}

dad_dlg = dialog {
   tile         = tile "door"
  ,bounds       = { 370, 50, 480 }
  ,dsc          = "Отце все сложнее скрывать, как ему плохо."
  ,dlg          = dxml "dad"
}

dad_pain = staticitem {
   dsc          = "медленно {массируя} виски пальцами."
  ,act          = "Хоть он и утверждает, что чувствует себя хорошо, в это сложно поверить."
  ,showonce     = true
  ,cnd          = not_("clinic._wait1")
}

clinicman = staticitem {
   dsc          = "Перед ними в очереди на прием остался всего один человек -- молодой {мужчина} со странным раздражением на лице, похожим то ли на ожог, то ли на экзему."
  ,act          = walk_("clinicman_dlg")
  ,cnd          = not_("clinic._wait1")
}

clinicman_dlg = dialog {
   tile         = tile "door"
  ,bounds       = { 370, 50, 480 }
  ,dsc          = "У мужчины странное раздражение на коже -- то ли ожог, то ли экзема."
  ,dlg          = dxml "clinicman"
}

oldwoman = staticitem {
   dsc          = "^^Мужчина с экземой на лице уже зашел в кабинет Тихонова, ждать теперь осталось совсем немного. Какая-то пожилая {женщина} с трясущимися руками заняла очередь за отцом. "
  ,act          = walk_("oldwoman_dlg")
  ,cnd          = if_("clinic._wait1")
}

oldwoman_dlg = dialog {
   tile         = tile "door"
  ,bounds       = { 370, 50, 480 }
  ,dsc          = "Женщине, наверное, лет девяносто. Катю даже как-то пугает ее мутный невидящий взгляд."
  ,dlg          = dxml "oldwoman"
}

coridor1 = scene {
   tile         = tile "wall3"
  ,bounds       = { 130, nil, 700 }
  ,dsc          = [[Эта поликлиника выглядит совсем не так, как их районная. Здесь опрятно и чисто, на стенах висят картины, а в кадках по углам стоят цветы. Даже посетителей
                    поликлинике не так много, и в коридорах прохладно и тихо.]]
  ,obj          = { "coridor1_info", "coridor1_noise" }
  ,nav          = {
                     up = vw("В конец коридора", "coridor2")
                    ,down = vw("К кабинету Тихонова", "mainhall")
                  }
}

coridor1_noise = staticitem {
   dsc          = "^^Катя слышит в конце коридора какой-то странный {шум}."
  ,act          = "Кажется, кто-то вскрикнул, а потом начали хлопать двери."
  ,showonce     = true
  ,cnd          = if_("clinic._wait2 and not clinic._wait3")
}

coridor1_info = staticitem {
   dsc          = "На стене справа висит доска для объявлений, на которой прилеплен скотчем один-единственный {лист}."
  ,act          = walk_("coridor1_info_scene")
  ,showonce     = true
}

coridor1_info_scene = scene {
   bounds       = { 260, 160, 480 }
  ,dsc          = [[УВАЖАЕМЫЕ ПАЦИЕНТЫ!^^
                    С целью раннего выяления онкологических заболеваний мы рекомендуем вам раз в год проходить
                    платное профилактическое обследование в нашей поликлинике (онкоскрининг). Не пренебрегайте
                    своим здоровьев, помните, что на ранних стадиях рак поддается лечению в 80 процентах случаев.^^
                    Детали по программе профилактического обследования вы можете узнать по телефону: 412-0533.^^
                    Обследование проводится в смотровом кабинет №204 поликлиники №212 с 8-00 до 16-00 с понедельника
                    по четверг.]]
  ,nav          = {
                    down = vw("Отойти", "coridor1")
                  }
}

coridor2 = scene { 
   tile         = tile "wall1"
  ,bounds       = { 75, nil, 760 }
  ,dsc          = [[Хотя еще только начало дня, и Катя с отцом пришли в поликлинику всего полчаса назад, Катя чувствует сильную усталость,
                    точно много часов провела на ногах. Видимо, вчерашнее приключение дает себя знать. Катя попыталась вспомнить, как давно
                    она уже не была в институте. До экзаменов осталось меньше недели. Если так пойдет и дальше, то ее просто отчислят с
                    курса.^^]]
  ,obj          = { "coridor2_chairs" }
  ,nav          = {
                     up = vw("В конец коридора", "coridor3")
                    ,down = vw("К кабинету Тихонова", "coridor1")
                  }
}

coridor2_chairs = staticitem {
   dsc          = "В этой части коридора, видимо, зона отдыха. У потолка висит телевизор, правда, неработающий, на столике лежат глянцевые журналы, а широкие кресла у стены кажутся такими удобными. Кате невольно хочется {присесть}."
  ,act          = choose_ {
                     ["default"] = walk_("coridor2_chairs_scene_trans")
                    ,["clinic._wait1"] = "А если она снова начнет засыпать? Лучше не оставлять отца надолго одного."
                  }
}

coridor2_chairs_scene_trans = pause {
   time         = 1
  ,fading       = 20
  ,next         = "coridor2_chairs_scene"
}

coridor2_chairs_scene = scene {
   bounds       = { 260, 160, 480 }
  ,fading       = 90
  ,dsc          = [[Катя села в кресло, которое и правда оказалось очень удобным. Она вдруг подумала, что все это обязательно скоро
                    закончится, что пару недель спустя она будет вспоминать об этих событиях, о болезни отца, как о каком-нибудь потускневшем,
                    почти забывшемся сне -- как если бы все это лишь затянувшийся ночной кошмар, который должен вот-вот закончиться. Так
                    чувствуешь себя перед пробуждением, когда понимаешь, что все это лишь сон, что все твои страдания лишь вычурный и 
                    бессмысленный вымысел, что вся эта мнимая реальность, созданная в ночном бреду, постепенно развеивается, как мираж,
                    а за окном уже занимается рассвет, и тебя ждет чашка горячего кофе, бодрый выпуск утренних новостей и торопливая
                    поездка в институт.^^]]
  ,enter        = set_("clinic._wait1")
  ,obj          = { "coridor2_chairs_scene_knock" }
}

coridor2_chairs_scene_knock = staticitem {
   dsc          = "Катя и сама не заметила, как невольно начала засыпать, проваливаться в глубокую затягивающую пустоту. Ее разбудил лишь какой-то резкий {стук}."
  ,act          = walk_("coridor2_chairs_scene2")
}

coridor2_chairs_scene2 = scene {
   bounds       = { 260, 240, 480 }
  ,dsc          = [[Это просто хлопнула дверь. Доктор в белом халате вышел из кабинета и быстро зашагал куда-то в конец коридора.]]
  ,nav          = {
                    up = vw("Встать с кресла", "coridor2")
                  }
}

coridor3 = scene { 
   tile         = tile "wall2"
  ,bounds       = { 75, nil, 760 }
  ,obj          = { "coridor3_bed", "youngwoman", "coridor3_event" }
  ,nav          = {
                     up = vw("В конец коридора"):cnd("false", "Лучше не отходить далеко от кабинета доктора Тихонова. Скоро их очередь.")
                    ,down = vw("К кабинету Тихонова", "coridor2")
                  }
}

coridor3_event = staticitem {
   dsc          = "На полу неподвижно лежит женщина, изогнувшись в неестеественной позе, из-за которой она почему-то кажется похожей на сломанный манекен. Над женщиной склонился {врач} в белом халате."
  ,act          = walk_("doctor_dlg")
  ,cnd          = if_("clinic._wait2")
}

doctor_dlg = dialog {
   tile         = tile "wall2"
  ,bounds       = { 75, nil, 760 }
  ,dsc          = "Врач как будто не замечает ничего вокруг."
  ,dlg          = dxml "doctor"
}

coridor3_bed = staticitem {
   dsc          = "У стены стоит передвижная больничная {постель}, которая как-то странно смотрится в поликлинике."
  ,act          = "У Кати вдруг возникает какое-то нехорошее предчувствие, но она старательно отгоняет от себя все мрачные мысли. Скоро все закончится. Отцу станет лучше. Жизнь снова вернется в привычную колею."
  ,showonce     = true
  ,cnd          = not_("clinic._wait2")
}

youngwoman = staticitem {
   dsc          = "На скамейке у двери в кабинет очередного доктора сидит молодая {женщина}, которая как-то странно сжимает запястье левой руки и смотрит неподвижным взглядом в пол."
  ,act          = walk_("youngwoman_dlg")
  ,cnd          = not_("clinic._wait2")
}

youngwoman_dlg = dialog {
   tile         = tile "wall2"
  ,bounds       = { 75, nil, 760 }
  ,dsc          = "Кажется, ей плохо."
  ,src          = [[<phr a="-- Извините, что с вами? Может, позвать кого-нибудь?" b="Женщина не отвечает."></phr>]]
}

cabinet = scene {
   tile         = { tile "curtain2", 455, 200 }
  ,bounds       = { nil, 60 }
  ,dsc          = "В кабинете довольно сумеречно. Штора на окне задернута."
  ,alwaysdsc    = true
  ,obj          = { "tikhonov" }
}

tikhonov = staticitem {
   dsc          = "Доктор {Тихонов} сидит за столом и листает какие-то бумаги."
  ,act          = walk_("tikhonov_dlg")
}

tikhonov_dlg = dialog {
   tile         = { tile "curtain2", 455, 200 }
  ,bounds       = { nil, 60 }
  ,dlg          = dxml "tikhonov"
}

finita = pause {
   time         = 4000
  ,next         = "main"
}